package com.tbit.uqbike.service.business;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tbit.uqbike.object.pojo.*;
import com.tbit.uqbike.object.pojo.dto.PackageDelayDTO;
import com.tbit.uqbike.object.pojo.dto.RideCardUserDelayDTO;
import com.tbit.uqbike.object.value.LoginInfo;
import com.tbit.uqbike.object.value.UserRcDetail;
import com.tbit.common.entity.view.PageResult;
import com.tbit.common.entity.view.Result;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * 骑行卡
 *
 * @author Leon
 * 2019年9月24日 下午4:04:45
 */
public interface RideCardService {

    /**
     * 分页查询
     *
     * @param accountId
     * @param pageNO
     * @param rowCount
     * @return
     */
    List<RideCard> queryPage(Integer accountId, Integer feeId, Integer pageNO, Integer rowCount);

    /**
     * 分页查询总数
     *
     * @param accountId
     * @return
     */
    public Integer queryCount(Integer accountId, Integer feeId);

    /**
     * 添加
     *
     * @param rideCard
     */
    public void insert(RideCard rideCard);

    /**
     * 修改
     *
     * @param rideCard
     */
    public void edit(RideCard rideCard);

    /**
     * 根据id查询
     *
     * @param rideCardId
     * @return
     */
    public RideCard getById(Integer rideCardId);

    /**
     * 修改为已失效
     *
     * @param rideCardId
     */
    void editEnable(Integer rideCardId, Integer accountId);

    /**
     * 骑行卡用户购买记录分页
     *
     * @param
     * @return
     */
    List<UserMember> userRideCardPage(Integer userId, Integer rowCount, Integer pageNO);

    /**
     * 骑行卡用户购买记录分页总数
     *
     * @param
     * @return
     */
    Integer userRideCardCount(Integer userId);

    /**
     * 获取骑行卡金额
     */
    Integer getMoneyByTime(List<Integer> accountIds, String startTime, String endTime, Integer type);

    /**
     * 骑行卡订单按天统计或按月统计
     */
    List<StatPark> statByType(List<Integer> accountIds, String startTime, String endTime, Integer type);

    /**
     * 骑行卡统计分页
     */
    List<UserRcDetail> getRideCardPage(Integer accountId, Integer type, Long startTime, Long endTime, Integer pageNO, Integer rowCount);

    /**
     * 骑行卡统计分页总数
     */
    Integer getRideCardCount(Integer accountId, Integer type, Long startTime, Long endTime);

    /**
     * 骑行卡统计导出
     */
    List<UserRcDetail> export(Integer accountId, Integer type, Long startTime, Long endTime);

    /**
     * 骑行卡统计总金额
     */
    MoneyData getTotalMoney(Integer accountId, Integer type, Long startTime, Long endTime);

    /**
     * 统计每类骑行卡的金额和订单量
     */
    List<Map<String, Object>> rideCardCountByType(Map<String, Object> params, Integer accountId, Integer type, Long startTime, Long endTime);

    /**
     * 修改免押卡次数
     */
    void EdituserRideCard(Map<String, Object> params, Integer userId, Integer rideCardId, Integer type, String orderNO, Integer useCount, Integer maxRide);

    UserMember getByOrderNO(String orderNO);

    /**
     * 停运批量延长骑行卡
     *
     * @param delayDTO 。
     * @return .
     */
    Result<String> rideCardUserDelay(RideCardUserDelayDTO delayDTO);

    /**
     * .
     *
     * @param of        分页参数
     * @param accountId 运营区域id
     * @param phone     .
     * @return 。
     */
    Result<PageResult<RideCardUserExtendLog>> extendLogListPage(Page<RideCardUserExtendLog> of, Integer accountId, String phone, Date startTime, Date endTime);

    /**
     * 延长记录详情分页
     *
     * @param logId 运营区域id
     * @param phone 手机号
     * @return .
     */
    Result<PageResult<RideCardUserExtendLogDetail>> extendLogDetailListPage(Page<RideCardUserExtendLogDetail> of, Integer logId, String phone);

    Result<String> modifyRideCardExpireTime(PackageDelayDTO delayDTO);

    /**
     * 根据购买订单号修改骑行卡使用次数
     *
     * @param orderNo     购买订单号
     * @param updateCount 修改次数
     */
    void updateCurrentNumByOrderNo(String orderNo, int updateCount);

    /**
     * 新增骑行卡模板
     *
     * @param rideCard rideCard
     */
    Result<Object> addRideCardTemplate(RideCard rideCard);

    /**
     * 删除骑行卡模板
     *
     * @param rideCardId 骑行卡模板id
     * @return result
     */
    Result<Object> deleteTemplate(Integer rideCardId);

    /**
     * 查询骑行卡模板
     *
     * @param accountId 品牌id
     * @param pageNO    页数
     * @param pageCount 条数
     * @return result
     */
    Result<PageResult<RideCard>> queryTemplate(Integer accountId, Integer pageNO, Integer pageCount);

    /**
     * 修改骑行卡模板
     *
     * @param rideCard rideCard
     * @return result
     */
    Result<Object> updateTemplate(RideCard rideCard);

    /**
     * 修改排序
     *
     * @param rideCard rideCard
     * @return result
     */
    Result<Object> updateSort(RideCard rideCard);

    /**
     * 根据用户id和区域id集合获取最近骑行卡购买记录
     *
     * @param userId        用户id
     * @param accountIdList 区域id集合
     */
    UserMember userRideCardByAccountIdList(Integer userId, List<Integer> accountIdList);

    /**
     * 骑行卡失效
     *
     * @param userMember userMember
     */
    int updateValid(UserMember userMember);

    /**
     * 批量赠送骑行卡
     * @param file          文件
     * @param accountId     区域id
     * @param rideCardId    骑行卡id
     * @param remark        备注
     * @return              Result
     */
    Result<Object> batchGiveRideCard(MultipartFile file, Integer accountId, Integer rideCardId, String remark, LoginInfo login);
}
